/**
 * 转换并上传工具包
 * 使用自定义DSL定义工具元数据
 */

import type { ToolPackage } from '../../core/tool-registry.js';
import { createTool, field } from '../../core/tool-schema.js';
import { TestCaseSessionTool } from './tool.js';

const testCaseSessionTool = new TestCaseSessionTool();

const testCaseSessionCreate = createTool()
  .name('testcase_session_create')
  .title('创建测试用例会话')
  .description('调用testcase_session_append和testcase_session_finalize前需要创建会话')
  .version('1.0.0')
  .author('Test Case Writer Team')
  .category('文件处理')
  .tags(['excel', 'session', 'file'])
  .parameter(
    'name',
    field.required(
      field.string({
        description:
          '生成的Excel文件名称（会用作Minio中的对象名，自动添加.xlsx扩展名，建议带上版本号）',
      })
    )
  )
  .parameter(
    'fields',
    field.required(
      field.array(field.string(), {
        description:
          '列标题数组，按顺序定义各列字段名。必须与Excel模板中的列标题匹配，且与data中每一行的长度一致。',
      })
    )
  )
  .build(async params => {
    return await testCaseSessionTool.create(params as any);
  });

const testCaseSessionAppend = createTool()
  .name('testcase_session_append')
  .title('向测试文档的末尾增加测试用例')
  .description('把新的测试用例增加到文档的末尾，一个会话中可以多次调用')
  .version('1.0.0')
  .author('Test Case Writer Team')
  .category('文件处理')
  .tags(['excel', 'session', 'file'])
  .parameter(
    'sessionId',
    field.required(field.string({ description: 'testcase_session_create返回的sessionID' }))
  )
  .parameter(
    'data',
    field.required(
      field.array(
        field.array(field.string(), {
          description:
            '一行数据，包含与testcase_session_create操作中fields 数组对应的字符串值。数组长度必须与 fields 长度一致。',
        }),
        {
          description:
            '测试用例数据的二维数组，外层数组代表多行数据，内层数组代表一行中各列的值。每一行数据的长度必须与 fields 数组的长度一致，顺序一一对应。例：[["用例1", "模块A", "P0"], ["用例2", "模块B", "P1"]]',
          minLength: 1,
        }
      )
    )
  )
  .build(async params => {
    return await testCaseSessionTool.append(params as any);
  });

const testCaseSessionFinalize = createTool()
  .name('testcase_session_finalize')
  .title('结束会话')
  .description('结束当前会话，把最终的测试用例上传到云端存储，返回下载链接')
  .version('1.0.0')
  .author('Test Case Writer Team')
  .category('文件处理')
  .tags(['excel', 'session', 'file'])
  .parameter(
    'sessionId',
    field.required(field.string({ description: 'testcase_session_create返回的sessionID' }))
  )
  .build(async params => {
    return await testCaseSessionTool.finalize(params as any);
  });

// 导出工具包
export const tools = [testCaseSessionCreate, testCaseSessionAppend, testCaseSessionFinalize];

export const meta = {
  name: 'testcase',
  version: '1.0.0',
  description: '测试用例转换和上传工具包',
  author: 'Test Case Writer Team',
};

// 默认导出
const toolPackage: ToolPackage = {
  tools,
  meta,
};

export default toolPackage;
